/**
 * 创建 Virtual DOM
 * @param {string} type 类型
 * @param {object | null} props 属性
 * @param  {createElement[]} children 子元素
 * @return {object} Virtual DOM
 */
export default function createElement(type, props, ...children) {
  // concat 拷贝一下
  const childrenElements = [].concat(...children).reduce((res, child) => {
    // 排除 null true false
    if (child !== null && child !== true && child !== false) {
      if (child instanceof Object) {
        // 对象类型直接 push
        res.push(child);
      } else {
        // 文本类型需要 重新构件一下对象类型
        res.push(createElement('text', { textContent: child }));
      }
    }
    return res;
  }, []);

  return {
    type,
    props: Object.assign({ children: childrenElements }, props),
    children: childrenElements,
  };
}
